import {
  Controller,
  Get,
  Post,
  Request,
  Response,
  Param,
  Query,
  HttpCode,
  Body,
  Headers,
  Inject,
  ParseIntPipe,
  ParseUUIDPipe,
} from '@nestjs/common';
import { AppService } from './app.service';
import { ListService } from './list/list.service';
// 获取uuid第三方包
import * as uuid from 'uuid';

console.log(uuid.v1());
// 这是路由开头
@Controller('user')
export class AppController {
  // 这里帮我们注入实例化了AppService， 无需额外继承
  constructor(
    @Inject('wujiajie') private readonly Mywujiajie,
    private readonly appService: AppService,
    private readonly ListService: ListService,
  ) {}

  // Get修饰器，这会是个Get请求，后面是路径
  @Get('hello')
  // @Request：请求参数修饰器，前端的请求参数,可以传属性，直接获取该数据
  // @Response：响应数据修饰器，发送响应的数据
  // 修饰符里面可以传管道，把前端参数转换类型 或者 验证数据是否正确
  // ParseIntPipe: 转换为number
  // ParseUUIDPipe: 验证是否为uuid
  getHello(
    @Request() req,
    @Query('age', ParseIntPipe) age: number,
    @Query('uuid', ParseUUIDPipe) uuid: number,
  ) {
    // 前端的请求参数
    console.log('req,', req.query);
    console.log('query,', typeof age);
    console.log('uuid,', uuid);
    // 发送响应的数据
    // res.send('123');
    // 默认是return就是响应的数据
    return this.Mywujiajie;
  }

  @Post('my')
  // 设置响应码
  @HttpCode(500)
  find(@Request() req, @Body() body, @Headers() headers) {
    // 前端的请求参数
    console.log('req,', req.body);
    console.log('body,', body);
    console.log('headers,', headers);
    // 发送响应的数据
    // res.send({
    //   code: 200,
    //   message: 'body请求',
    // });
    return 123;
  }

  @Get('list')
  create() {
    return this.ListService.findAll();
  }

  // Get修饰器，这会是个Get请求，后面是路径
  @Get(':id')
  // @Request：请求参数修饰器，前端的请求参数
  // @Response：响应数据修饰器，发送响应的数据
  findId(@Request() req, @Response() res, @Query() query) {
    // 前端的请求参数
    console.log('req,', req.query);
    console.log('query,', query);
    // 发送响应的数据
    // http://localhost:3000/user/123才可调用
    // res.send('动态路由，必传Id才可调用');
    // 默认是return就是响应的数据
    res.status(500).send({
      code: 200,
      message: '动态路由，必传Id才可调用',
    });
  }
}
